/**
 * 
 * Opened Touchable RIA Framework - A Web RIA Javascript Framework
 * 
 * Copyright (c) 2012
 * Dual licensed under the MIT or GPL v2 licenses.
 * 
 * @author  CuTe_CuBe
 * @version $Id: util.js 8 2012-03-11 14:16:41Z cc.hgfeng@gmail.com $
 */

/**
 * OTR.Util 通用扩展功能方法封装
 * 
 */
OTR.Util = {
    
    /**
     * 版本号码比较，参数为比较的版本号
     * 相等时返回 0
     * 第一个参数大于第二个参数时返回 1，否则返回 -1
     * 
     * @param string vers
     * @param string verd
     * @return int
     */
    versionCompare: function(lft, rgt) {
        var alft = lft.split('.'),
            argt = rgt.split('.');

        var i = 0, sl = alft.length, dl = argt.length;
        for (i; i < sl; i++) {
            if (i == dl) {
                return 1;
            }

            if (alft[i] == argt[i]) {
                continue ;
            } else {
                return alft[i] > argt[i] ? 1 : -1;
            }
        }

        return 0;
    },
    
    /**
     * 字符串首字母转换为大写
     * 
     * @param string
     */
    ucFirst: function(string) {
        if (!OTR.Util.isString(string) || !string.length) {
            return string ;
        }
    },

    /**
     * 判断给定的参数是否对象
     * 
     * @param mixed obj
     * @return boolean
     */
    isObject: function(obj) {
        return obj && typeof(obj) == 'object';
    },

    /**
     * 判断参数是否数组
     * 
     * @param mixed obj
     * @return boolean
     */
    isArray: function(obj) {
        return obj && -1 != obj.constructor.toString().indexOf('function Array');
    },

    /**
     * 判断给定的参数是否函数
     * 
     * @param mixed obj
     * @return boolean
     */
    isFunction: function(obj) {
        return typeof (obj) == 'function';
    },

    /**
     * 判断参数是否字符串
     * 
     * @param mixed val
     * @return boolean
     */
    isString: function(val) {
        return typeof(val) == 'string';
    },

    /**
     * 判断参数是否整形
     * 
     * @param mixed val
     * @return boolean
     */
    isInt: function(val) {
        return parseInt(val) == val;
    },

    /**
     * 判断参数是否数字格式
     * 
     * @param string str
     * @return boolean
     */
    isNumeric: function(str) {
        if (!this.isString(str)) {
            return false;
        }
        
        return (/^[\d]+((^\.{1}[\d]+$){0,1}|[\d])$/).test(str);
    }
};